//
//  Tools.h
//  MS3.0
//
//  Created by 徐杨 on 2017/6/15.
//  Copyright © 2017年 麦时. All rights reserved.
//

/*
    1、你可以在任何地方加上这句话，可以用来统一收起键盘
    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
 */

#import <Foundation/Foundation.h>

// Keys
#define kAPP_VERSION @"kAPP_VERSION"


typedef void(^cleanCacheBlock)(void);

@interface Tools : NSObject
/** 根据HTML字符串设置 富文本 */
+ (NSAttributedString *)RTFContentWithHTMLString:(NSString *)HTMLString contentWidth:(CGFloat)contentWidth;
+ (CGSize)RTFContentSizeWithAttributed:(NSAttributedString *)attr contentWidth:(CGFloat)contentWidth;
/** 是否是新版本 isNewVersion  */
+ (BOOL)isNewVersionWithKey:(NSString *)key;
/** 自定义NSDateComponents对象 */
+ (NSDateComponents *)customComponents;
/** 英文 数字 正则 */
+ (BOOL)judgeRegexOnlyEnglishNumber:(NSString *)content;
#pragma mark - 正则 中文,英文,数字
/** 正则 中文,英文,数字*/
//+ (BOOL)judgeRegexOnlyChineseEnglishNumber:(NSString *)content;
/** 长度8-16 且包含数字和英文 */
+ (BOOL)judgePassWordLegal:(NSString *)content;

/** 检测字符串是否是纯数字 */
+ (BOOL)isNumber:(NSString *)num;
/** 检测字符串是否是数字或字母组成 */
+ (BOOL)isNumberOrLetter:(NSString *)num;
/** 当前控制器名称 */
+ (NSString *)currentVCNameWithClass:(Class)aClass;

#pragma mark - 时间分割
/** 时间分割*/
+ (NSString *)timeStrSegmentation:(NSString *)timeStr;

#pragma mark - 清理缓存
/** 清理缓存 */
+ (void)cleanCache:(cleanCacheBlock)block;

#pragma mark - 删除某个文件
/** 删除某个文件 */
+ (void)deleteFileAtPath:(NSString *)filePath;

#pragma mark - 获取缓存文件大小
/** 获取缓存文件大小 */
+ (CGFloat)cacheSize;

#pragma mark - 获取单个文件大小
/** 获取单个文件大小 */
+ (long long)fileSizeAtPath:(NSString *)filePath;

#pragma mark - 格式化价格，带逗号
/** 格式化价格，带逗号 */
//+ (NSString *)priceWithSeparator:(NSNumber *)number;

#pragma mark - 字符串插入逗号格式 是否加.00
/** 字符串插入逗号格式 是否加.00*/
+ (NSString *)priceFormatInsertComma:(NSString *)priceText isDecimals:(BOOL)isDecimals;

#pragma mark - 价格格式化
/** 价格格式化 价格格式化 大于10000显示1万 */
+ (NSString *)priceFormat:(NSString *)priceString;

#pragma mark - 判断一个字符串是否是整形
/** 判断一个字符串是否是整形 */
+ (BOOL)isPureInt:(NSString*)string;

#pragma mark - 模型转字典
/** 模型转字典 */
+ (NSMutableDictionary *)returnDictionaryByModel:(NSObject *)model;

#pragma mark - 根据image 获得image的type jpg/png
/**
 根据image 获得image的type jpg/png
 */
+ (NSString *)contentTypeWithImage:(UIImage *)image;

#pragma mark - 相机权限
+ (BOOL)devicePermissionForCamera;
//
//#pragma mark - 相册权限
//+ (BOOL)devicePermissionForPhotoAlbum;

#pragma mark - 判断是否含有非法字符
/** 判断是否含有非法字符 */
+ (BOOL)judgeTheillegalCharacter:(NSString *)content;

#pragma mark - 是否包含emoji表情
/** 是否包含emoji表情 */
+ (BOOL)stringContainsEmoji:(NSString *)string;

#pragma mark - 获取缓存内存大小
/** 获取缓存内存大小 */
//+ (CGFloat)getCachSize;

#pragma mark - 清除缓存
/** 清除缓存 */
//+ (void)clearMemeory;

#pragma mark - 获取视频任意帧
/** 获取视频任意帧 */
+ (UIImage *)thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time;

#pragma mark - 计算文字大小
/** 计算文字大小 */
+ (CGSize)sizeForText:(NSString *)text fontSize:(CGFloat)fontSize size:(CGSize)size;

+ (CGSize)boundingAllRectWithSize:(NSString*)txt font:(UIFont*)font size:(CGSize)size;

//MD5加密
+ (NSString *) md5:(NSString *)str;

#pragma mark -  获取rootViewController
+ (UIViewController *)rootViewController;

#pragma mark - 获取Window当前显示的ViewController
+ (UIViewController*)currentViewController;

#pragma mark - 将字符串转化成试图控制器
/**
 *  将字符串转化成视图 控制器
 */
+ (UIViewController *)StringIntoViewController:(NSString *)classString;


#pragma mark - 验证银行卡号是否规范
/**
 *  验证银行卡号是否规范
 */
+ (BOOL)validateBankCardWithNumber:(NSString *)cardNum;


#pragma mark - 判断身份证号码是否规范
/**
 *  判断身份证号码是否规范
 */
+ (BOOL)checkIdentityCardNo:(NSString*)cardNo;

#pragma mark - 验证手机号码

/** 验证手机号码 */
+ (BOOL)validatePhone:(NSString *)phoneNumber;

#pragma mark - 验证正整数
/** 验证正整数 */
+ (BOOL)validatePositiveInteger:(NSString *)integer;

#pragma mark - 拨打电话
/**
 *  拨打电话
 */
+ (void)makePhoneCallWithTelNumber:(NSString *)tel;



#pragma mark - 直接打开网页
/**
 *  直接打开网页
 */
+ (void)openURLWithUrlString:(NSString *)url;


#pragma mark - 获取当前时间
/**
 *  获取当前时间
 */
+ (NSString *)currentTime;


#pragma mark - 将时间转换成时间戳
/**
 *  将时间转换成时间戳
 *
 *   时间戳：指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
 */
+ (NSString *)timeStringIntoTimeStamp:(NSString *)time;


#pragma mark - 将时间戳转换成时间
/**
 *  将时间戳转换成时间
 */
+ (NSString *)timeStampIntoTimeString:(NSString *)time;


#pragma mark - 将时间戳转换成年月日
/**
 *  将时间戳转换成时间
 */
+ (NSString *)timeStampIntoYYMMDD:(NSTimeInterval)time;


#pragma mark - 通过时间字符串获取年、月、日
/**
 *  通过时间字符串获取年、月、日
 */
+ (NSArray *)getYearAndMonthAndDayFromTimeString:(NSString *)time;


#pragma mark - 获取今天、明天、后天的日期
/**
 *  获取今天、明天、后天的日期
 */
+ (NSArray *)timeForTheRecentDate;

#pragma mark - 获取当前时间的时间戳
/**
 *  获取当前时间的时间戳
 */
+ (NSString *)getCurrentTimestamp;

#pragma mark - 当前界面截图
/**
 *  当前界面截图
 */
+ (UIImage *)imageFromCurrentView:(UIView *)view;

#pragma mark - 获取Documents中文件的路径
/**
 *  获取Documents中文件的路径
 */
+ (NSString *)accessToTheDocumentsInTheFilePath:(NSString *)fileName;


#pragma mark - 判断网址是否有效
/**
 *  判断网址是否有效
 */
+ (BOOL)validateHttp:(NSString *)textString;


#pragma mark - 给view设置边框
/**
 *  给view设置边框(指定边框)
 *
 */
+ (void)setBorderWithView:(UIView *)view top:(BOOL)top left:(BOOL)left bottom:(BOOL)bottom right:(BOOL)right borderColor:(UIColor *)color borderWidth:(CGFloat)width;

#pragma mark - 给view设置圆角

/**
 给view设置圆角(指定圆角)
 
 @param view 目标 View
 @param targetAngles  想要改变的角 可多选 用 | 字符分开
 @param size 圆角半径(CGSize 格式 所以是给出的 椭圆半径)
 如果你们有更变态需求每个角的半径都不一样那就让美工 MM 切图吧
 */
+ (void)setCornerRadiuswithView:(UIView *)view targetAngles:(UIRectCorner) targetAngles cornerRadii:(CGSize) size;

#pragma mark - 将数组中重复的对象去除，只保留一个
/**
 *  将数组中重复的对象去除，只保留一个
 */
+ (NSMutableArray *)arrayWithMemberIsOnly:(NSMutableArray *)array;


#pragma mark - 图片大小设置
/**
 *  图片大小设置
 */
+ (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;


#pragma mark - 获取当前屏幕显示的viewcontroller
/**
 *  获取当前屏幕显示的viewcontroller
 */
+ (UIViewController *)getCurrentVC;


#pragma mark - 获取当前处于activity状态的view controller
/**
 *  获取当前处于activity状态的view controller
 */
+ (UIViewController *)activityViewController;


#pragma mark - 清空字典数据
/**
 *  清空字典数据
 */
+ (NSMutableDictionary *)clearNullData:(NSDictionary *)dic;


#pragma mark - 格式化千分位
/**
 *  格式化千分位
 */
+ (NSString *)positiveFormat:(NSString *)text;


#pragma mark - 不四舍五入  小数
/**
 *  不四舍五入  小数
 */
+ (NSString *)notRounding:(float)price afterPoint:(int)position;


#pragma mark - 获取用户手机信息
/**
 *  获取用户手机信息
 */
+ (NSMutableDictionary *)getUserPhoneInfo;


#pragma mark - 获取手机品牌型号
/**
 *  获取手机品牌型号
 */
+ (NSString *)getUserPhoneModelNumber;


#pragma mark - 从单例类（NSUserDefaults）中取出可变数组（用于后面操作添加或者删除元素）
/**
 *  从单例类（NSUserDefaults）中取出可变数组（用于后面操作添加或者删除元素）
 */
+ (NSMutableArray *)getMutableArrayFromNSUserDefaults:(NSString *)path;

#pragma mark - 字典转化成字符串
/**
 *  字典转化成字符串
 */
+ (NSString *)dictionaryToJson:(NSDictionary *)dic;

#pragma mark - 获取设备IP地址
/**
 *  获取设备IP地址 （只在手机真机上可用）
 */
+ (NSString *)getIPAddress;

#pragma mark - 获取host（主机）属性
+ (NSString *)hostname;

#pragma mark - 获取本地host(主机)的IP地址
/**
 *  获取本地host(主机)的IP地址 (只在电脑上可用)
 */
+ (NSString *)localIPAddress;

#pragma mark - 获取设备的Mac地址
/**
 *  获取设备的Mac地址
 */
+ (NSString *)macAddress;

#pragma mark -  图片转成base64编码
/**
 图片转成base64编码
 @param imageName 传入图片名
 @return 返回base64格式Str
 */
+ (NSString *)imageConvertFormatBase64imageName:(NSString *)imageName;

#pragma mark - 将数组里的字符串排序

/**
 @param dataArray 要排序的数组
 @param grouping 是否分组存储 就是分成通讯录那样
 分布的话 分区数 dataArr.count
 分区中Cell 个数 [_dataArr[section][@"info"]count
 索引 就取出  _dataArr 中所有字典中的 title
 @return 排序好的数组
 */
+ (NSMutableArray *)Transformation:(NSArray *)dataArray isGrouping:(BOOL)grouping;

#pragma mark -  计算 image 高度

/**
 
 计算 image 高度
 
 @param image 目标 image
 @param defineWidth  理想宽度
 @return image 高度
 */
+ (CGFloat)heightForImage:(UIImage *)image targetWidth:(NSInteger) defineWidth;


/**
 *  检测麦克风权限，仅支持iOS7.0以上系统
 *
 *  @return 准许返回YES;否则返回NO
 */
//+ (BOOL)isMicrophonePermissionGranted;

/**
 *  检测相机权限
 *
 *  @return 准许返回YES;否则返回NO
 */
+ (BOOL)isCapturePermissionGranted;

/**
 *  检测相册权限
 *
 *  @return 准许返回YES;否则返回NO
 */
//+ (BOOL)isAssetsLibraryPermissionGranted;


#pragma mark - 图片放大
/**
 *  浏览大图
 *
 *  @param currentImageview 图片所在的imageView
 */
+ (void)scanBigImageWithImageView:(UIImageView *)currentImageview;


#pragma mark - 跳转到登陆页
/**
 *  跳转到登陆页
 *  直接跳转到登录
 */
+(void)pushSinge;
+(void)pushMeRegisterVC;


#pragma mark - 获取当前控制器
/**
 *  获取当前控制器
 *
 */
+(UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC;

#pragma mark - 通用提示
/**
 *  通用提示
 *
 */
+(void)showTips:(NSString *)str;

+ (UIViewController *)getVC;


@end
